home *** CD-ROM | disk | FTP | other *** search
/ HAKERIS 11 / HAKERIS 11.ISO / linux / system / LinuxConsole 0.4 / linuxconsole0.4install-en.iso / opt0.4.lcm / bin / dldrconfig < prev    next >
Encoding:
Text File  |  2004-02-26  |  43.5 KB  |  1,807 lines

  1. #!/bin/sh
  2. #
  3. # Copyright (c) 2003-2004 Linuxant inc.
  4. #
  5. # NOTE: The use and distribution of this software is governed by the terms in
  6. # the file LICENSE, which is included in the package. You must read this and
  7. # agree to these terms before using or distributing this software.
  8. #
  9. # This script handles all aspects of installing and configuring the
  10. # Linuxant DriverLoader for Wireless LAN devices driver under Linux.
  11. #
  12. # It tries to be as distribution-neutral as possible.
  13.  
  14. ask_yesno()
  15. {
  16.     $automode && return $2
  17.  
  18.     while true; do
  19.         echo -n "$1"
  20.         read answer
  21.         case "${answer}" in
  22.         [yY] | [yY][eE][sS])
  23.             return 0
  24.             ;;
  25.         [nN] | [nN][oO])
  26.             return 1
  27.             ;;
  28.         "")
  29.             return $2
  30.             ;;
  31.         *)
  32.             echo "Enter 'yes' or 'no'"
  33.             ;;
  34.         esac
  35.     done
  36. }
  37.  
  38. # Convert a key from display to internal format
  39. # The md5sum is used for input verification.
  40. disptokey()
  41. {
  42.     k="`echo \"$1\" | tr '[a-z]' '[A-Z]' | sed -e 's/^$/none/' -e 's/none/00000000/' | tr -d -c '[0-9A-F\012]'`"
  43.     case $k in
  44.     00000000)
  45.         echo "$k"
  46.         ;;
  47.     ????????????)
  48.         key="`echo \"$k\" | cut -c1-8`"
  49.         if [ "`echo \"${key}\" | md5sum | cut -c1-4 | tr '[a-f]' '[A-F]'`" = "`echo \"$k\" | cut -c9-12`" ]; then
  50.             echo "${key}"
  51.         else
  52.             echo "checksum error"
  53.         fi
  54.         ;;
  55.     *)
  56.         echo "format error"
  57.         ;;
  58.     esac
  59. }
  60.  
  61. # Convert a key from internal to display format
  62. # The md5sum is generated for input verification.
  63. keytodisp()
  64. {
  65.     key="$1"
  66.  
  67.     if [ -z "${key}" -o "${key}" = "00000000" ]; then
  68.         echo none
  69.         return 0
  70.     fi
  71.  
  72.     sum="`echo \"${key}\" | md5sum | cut -c1-4 | tr '[a-f]' '[A-F]'`"
  73.  
  74.     echo "${key}${sum}" | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)$/\1-\2-\3-\4-\5-\6/'
  75. }
  76.  
  77. ask_license()
  78. {
  79.     while true; do
  80.         if [ -n "${setlicense}" ]; then
  81.             answer="`disptokey \"${setlicense}\"`"
  82.         elif ${automode}; then
  83.             answer="${license}"
  84.         else
  85.             echo ""
  86.  
  87.             echo "License keys can be obtained from http://www.linuxant.com/"
  88.             echo ""
  89.             echo "The MAC address for interface ${parm_netifname[${netif}]} is: ${parm_hwid[${netif}]}"
  90.             echo ""
  91.             echo -n "Please enter license key [`keytodisp \"$license\"`]: "
  92.             read answer
  93.             case "${answer}" in
  94.             "" | *"[     ]"*)
  95.                 answer="${license}"
  96.                 ;;
  97.             *)
  98.                 answer="`disptokey \"${answer}\"`"
  99.                 ;;
  100.             esac
  101.         fi
  102.  
  103.         case "${answer}" in
  104.         [0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F])
  105.             license="${answer}"
  106.             return 0
  107.             ;;
  108.         *)
  109.             echo ""
  110.             echo "ERROR: Invalid license key: \"${answer}\"."
  111.             if ${automode}; then
  112.                 return 1
  113.             fi
  114.             setlicense=""
  115.             ;;
  116.         esac
  117.     done
  118. }
  119.  
  120. ask_licowner()
  121. {
  122.     while true; do
  123.         if [ -n "${setlicowner}" ]; then
  124.             answer="${setlicowner}"
  125.         elif ${automode}; then
  126.             if [ -z "${licowner}" ]; then
  127.                 return 1
  128.             fi
  129.             answer="${licowner}"
  130.         else
  131.             echo ""
  132.             echo "Note: we respect user privacy. Email addresses are not communicated"
  133.             echo "nor used for any purpose other than to manage licenses!"
  134.             echo ""
  135.  
  136.             echo -n "Please enter your email address [$licowner]: "
  137.             read answer
  138.             case "${answer}" in
  139.             "" | *"[     ]"*)
  140.                 answer="${licowner}"
  141.                 ;;
  142.             *)
  143.                 answer="`echo \"${answer}\" | tr '[A-Z]' '[a-z]' | tr -d '[     <>\012]'`"
  144.                 ;;
  145.             esac
  146.         fi
  147.  
  148.         case "${answer}" in
  149.         ?*@?*.?*)
  150.             licowner="${answer}"
  151.             return 0
  152.             ;;
  153.         *)
  154.             if ! ${automode} || [ "${answer}" != "unknown" ]; then
  155.                 echo ""
  156.                 echo "ERROR: Invalid email address format: \"${answer}\"."
  157.             fi
  158.             if ${automode}; then
  159.                 return 1
  160.             fi
  161.             setlicowner=""
  162.             ;;
  163.         esac
  164.     done
  165. }
  166.  
  167. needfullversion() {
  168.     echo ""
  169.     echo "This is a time-limited demonstration license."
  170.     echo "A license without this limitation can be obtained from http://www.linuxant.com/"
  171. }
  172.  
  173. configure_license()
  174. {
  175.     if ${isfreeversion}; then
  176.         needfullversion
  177.         return 1
  178.     fi
  179.  
  180.     licowner="${setlicowner}"
  181.     if [ -z "${licowner}" -a -n "${parm_licowner[${netif}]}" ]; then
  182.         licowner="${parm_licowner[${netif}]}"
  183.         if [ "${licowner}" = "unknown" ]; then
  184.             licowner="${lastowner}"
  185.         fi
  186.     fi
  187.  
  188.     case "${setlicense}" in
  189.     ?*/?*)
  190.         setlicowner="`echo \"${setlicense}\" | ${AWK} -F/ '{print $1}'`"
  191.         setlicense="`echo \"${setlicense}\" | ${AWK} -F/ '{print $2}'`"
  192.         ;;
  193.     *)
  194.         ;;
  195.     esac
  196.  
  197.     if [ -z "${setlicense}" ]; then
  198.         if [ -n "${parm_lickey[${netif}]}" ]; then
  199.             license="${parm_lickey[${netif}]}"
  200.         else
  201.             license=""
  202.         fi
  203.     else
  204.         license="`disptokey \"${setlicense}\"`"
  205.     fi
  206.  
  207.     ask_licowner || return 1
  208.     parm_licowner[${netif}]="${licowner}"
  209.  
  210.     ask_license || return 1
  211.     parm_lickey[${netif}]="${license}"
  212.  
  213.     if ! dldrstop >/dev/null 2>&1; then
  214.         sleep 1 # retry
  215.         if ! dldrstop >/dev/null 2>&1; then
  216.             echo ""
  217.             echo "Unable to unload driver to configure license; adapter in use?"
  218.             echo "\"License status\" information might not be up to date."
  219.             echo "Please reboot your computer."
  220.         fi
  221.     fi
  222.     sleep 1
  223.  
  224.     echo ""
  225.     echo "Setting license for interface ${parm_netifname[${netif}]}: \"${parm_licowner[${netif}]}/`keytodisp \"${parm_lickey[${netif}]}\"`\""
  226.  
  227.     cfgfile=${dldrnvmdir}/${parm_hwid[${netif}]}
  228.     if [ ! -e ${cfgfile} ]; then
  229.          touch ${cfgfile}
  230.     fi
  231.     if (
  232.         sed -e '/^License/d'
  233.         echo "LicenseOwner=\"${parm_licowner[${netif}]}\""
  234.         echo "LicenseKey=0x${parm_lickey[${netif}]}"
  235.     )  < ${cfgfile} > ${cfgfile}.$$; then
  236.         if ! cp ${cfgfile}.$$ ${cfgfile}; then
  237.             rm -f ${cfgfile}.$$ ${outcfgfile}
  238.             exit 1
  239.         fi
  240.     fi
  241.     rm -f ${cfgfile}.$$
  242.  
  243.     [ -n "${parm_licowner[${netif}]}" -a "${parm_licowner[${netif}]}" != "unknown" ] && lastowner="${parm_licowner[${netif}]}"
  244.     rereadparms=true
  245.     res=$?
  246.  
  247.     return ${res}
  248. }
  249.  
  250. ask_netdevname()
  251. {
  252.     while true; do
  253.         if [ -n "${setnetdevname}" ]; then
  254.             answer="${setnetdevname}"
  255.         elif ${automode}; then
  256.             if [ -z "${netdevname}" ]; then
  257.                 return 1
  258.             fi
  259.             answer="${netdevname}"
  260.         else
  261.             echo ""
  262.             echo "Note: %d will be substituted with device instance number"
  263.             echo "i.e. wlan%d becomes wlan0, wlan1, and so on.."
  264.             echo ""
  265.  
  266.             echo -n "Please enter desired network interface name [$netdevname]: "
  267.             read answer
  268.             case "${answer}" in
  269.             "" | *"[     ]"*)
  270.                 answer="${netdevname}"
  271.                 ;;
  272.             *)
  273.                 answer="`echo \"${answer}\" | tr '[A-Z]' '[a-z]' | tr -d '[     \012]'`"
  274.                 ;;
  275.             esac
  276.         fi
  277.  
  278. #        case "${answer}" in
  279. #        ?*@?*.?*)
  280.             netdevname="${answer}"
  281.             return 0
  282. #            ;;
  283. #        *)
  284. #            if ! ${automode} || [ "${answer}" != "" ]; then
  285. #                echo ""
  286. #                echo "ERROR: Invalid network interface name format: \"${answer}\"."
  287. #            fi
  288. #            if ${automode}; then
  289. #                return 1
  290. #            fi
  291. #            setnetdevname=""
  292. #            ;;
  293. #        esac
  294.     done
  295. }
  296.  
  297. configure_netdevname()
  298. {
  299.     netdevname="${setnetdevname}"
  300.     if [ -z "${netdevname}" -a -n "${parm_netdevname[${netif}]}" ]; then
  301.         netdevname="${parm_netdevname[${netif}]}"
  302.     fi
  303.  
  304.     if [ -z "${netdevname}" ]; then
  305.         netdevname="eth%d"
  306.     fi
  307.  
  308.     ask_netdevname || return 1
  309.     parm_netdevname[${netif}]="${netdevname}"
  310.  
  311.     if ! dldrstop >/dev/null 2>&1; then
  312.         sleep 1 # retry
  313.         if ! dldrstop >/dev/null 2>&1; then
  314.             echo ""
  315.             echo "Unable to unload driver to configure network interface name format; adapter in use?"
  316.             echo "Please reboot your computer."
  317.         fi
  318.     fi
  319.     sleep 1
  320.  
  321.     echo ""
  322.     echo "Setting device name format for interface ${parm_netifname[${netif}]} to \"${parm_netdevname[${netif}]}\""
  323.  
  324.     cfgfile=${dldrcnfdir}/${parm_hwid[${netif}]}
  325.     if [ ! -e ${cfgfile} ]; then
  326.          touch ${cfgfile}
  327.     fi
  328.     if (
  329.         sed -e '/^DriverLoaderNetDevName/d'
  330.         echo "DriverLoaderNetDevName=\"${parm_netdevname[${netif}]}\""
  331.     )  < ${cfgfile} > ${cfgfile}.$$; then
  332.         if ! cp ${cfgfile}.$$ ${cfgfile}; then
  333.             rm -f ${cfgfile}.$$ ${outcfgfile}
  334.             exit 1
  335.         fi
  336.     fi
  337.     rm -f ${cfgfile}.$$
  338.  
  339.     rereadparms=true
  340.     res=$?
  341.  
  342.     return ${res}
  343. }
  344.  
  345. ask_webconf()
  346. {
  347.     while true; do
  348.         if [ -n "${setwebconf}" ]; then
  349.             answer="${setwebconf}"
  350.         elif ${automode}; then
  351.             if [ -z "${webconf}" ]; then
  352.                 return 1
  353.             fi
  354.             answer="${webconf}"
  355.         else
  356.             echo ""
  357.  
  358.             echo -n "Please enter address:port for web configurator or "off" to disable it [$webconf]: "
  359.             read answer
  360.             case "${answer}" in
  361.             "" | *"[     ]"*)
  362.                 answer="${webconf}"
  363.                 ;;
  364.             *)
  365.                 answer="`echo \"${answer}\" | tr '[A-Z]' '[a-z]' | tr -d '[     \012]'`"
  366.                 ;;
  367.             esac
  368.         fi
  369.  
  370.         case "${answer}" in
  371.         ?*:?* | [oO][fF][fF])
  372.             webconf="${answer}"
  373.             return 0
  374.             ;;
  375.         *)
  376.             if ! ${automode} || [ "${answer}" != "" ]; then
  377.                 echo ""
  378.                 echo "ERROR: Invalid address:port format: \"${answer}\"."
  379.             fi
  380.             if ${automode}; then
  381.                 return 1
  382.             fi
  383.             setwebconf=""
  384.             ;;
  385.         esac
  386.     done
  387. }
  388.  
  389. configure_webconf()
  390. {
  391.     webconf="${setwebconf}"
  392.     if [ -z "${webconf}" -a -n "${parm_webconf}" ]; then
  393.         webconf="${parm_webconf}"
  394.     fi
  395.  
  396.     if [ -z "${webconf}" ]; then
  397.         webconf="127.0.0.1:18020"
  398.     fi
  399.  
  400.     ask_webconf || return 1
  401.  
  402.     parm_webconf="${webconf}"
  403.     parm_webconfport="`echo \"${parm_webconf}\" | awk -F: '{print $2}'`"
  404.  
  405.     DLDRHELPERACTION=stop /usr/lib/driverloader/webconfd
  406.  
  407.     echo ""
  408.     echo "Setting web configurator to \"${parm_webconf}\""
  409.  
  410.     echo "${parm_webconf}" > "${dldrnvmdir}/webconf"
  411.     res=$?
  412.  
  413.     case "${parm_webconf}" in
  414.     ?*:?*)
  415.         sleep 1
  416.         DLDRHELPERACTION=start /usr/lib/driverloader/webconfd
  417.         ;;
  418.     *)
  419.         ;;
  420.     esac
  421.  
  422.     return ${res}
  423. }
  424.  
  425. use_prebuilt_modules()
  426. {
  427.     rm -f "/lib/modules/${OSKERNVERS}/misc/driverloader"*.${KO}
  428.     if [ ! -d "/lib/modules/${OSKERNVERS}/misc" ]; then
  429.         mkdir -p "/lib/modules/${OSKERNVERS}/misc"
  430.     fi
  431.     ln -s "${dldrlibdir}/modules/binaries/$1/driverloader"*.${KO} "/lib/modules/${OSKERNVERS}/misc/"
  432. }
  433.  
  434. files_present()
  435. {
  436.     for f; do
  437.         if [ ! -f "${f}" ]; then
  438.             missing_file="${f}"
  439.             return 1
  440.         fi
  441.     done
  442. }
  443.  
  444. remove_temp_kernel_tree()
  445. {
  446.     if [ -n "${KERNELORG}" ]; then
  447.         rm -rf "${KERNELSRC}"
  448.         KERNELSRC="${KERNELORG}"
  449.         KERNELORG=""
  450.         return 0
  451.     fi
  452.  
  453.     return 1
  454. }
  455.  
  456. create_temp_kernel_tree()
  457. {
  458.     KERNELORG="${KERNELSRC}"
  459.     # get absolute pathname with cd/pwd to ensure that our temp dir
  460.     # is on same filesystem due to use of hardlinks by cp -al
  461.     KERNELSRC="`(cd \"${KERNELORG}\" && /bin/pwd)`-dldrtmp$$"
  462.     rm -rf "${KERNELSRC}"
  463.     if ! cp -al "${KERNELORG}/." "${KERNELSRC}"; then
  464.         remove_temp_kernel_tree
  465.         return 1
  466.     fi
  467.  
  468.     return 0
  469. }
  470.  
  471. kernelrebuild_instructions()
  472. {
  473.         echo ""
  474.         echo "First, ensure that the proper kernel source and compiler packages"
  475.         echo "from your distribution vendor and/or the commnetify are installed."
  476.         echo ""
  477.         echo "The Linux kernel can then be reconfigured by running \"make menuconfig\""
  478.         echo "under the kernel source directory (usually /usr/src/linux)."
  479.         echo ""
  480.         echo "Verify that the proper options for your system are selected."
  481.         echo ""
  482.         echo "Then compile and install your new kernel (for more information about"
  483.         echo "this procedure, see the README file under the kernel source directory),"
  484.         echo "reboot the system using the new kernel, and re-run \"dldrconfig\"."
  485. }
  486.  
  487. check_kernel()
  488. {
  489. #    if [ -n "$OSKERNSMP" ]; then
  490. #        echo 1>&2 ""
  491. #        echo 1>&2 "This driver has not been fully tested on SMP kernels."
  492. #        echo 1>&2 "Please report results to <support@linuxant.com>"
  493. #    fi
  494.  
  495.     case "${OSKERNVERS}" in
  496.     2.2*)
  497.         echo ""
  498.         echo 1>&2 "ERROR: 2.2 kernels are no longer supported by this driver!"
  499.         echo 1>&2 "Please upgrade your Linux distribution or kernel to version 2.4 or 2.6"
  500.         return 1
  501.         ;;
  502.     *)
  503.         ;;
  504.     esac
  505.  
  506.     return 0
  507. }
  508.  
  509. right_version_file()
  510. {
  511.     _versionf="$1"
  512.  
  513.     FILEKERNELVER="`echo UTS_RELEASE | gcc -E -I"${KERNELSRC}/include" -include "${_versionf}" - | grep '^"' | tr -d '"     '`"
  514.  
  515.     [ "${OSKERNVERS}" = "${FILEKERNELVER}" ]
  516. }
  517.  
  518. update_module_dependencies()
  519. {
  520.     depmod -a -e -u >/tmp/dldrconf.depmod.$$ 2>&1
  521.     res=$?
  522.  
  523.     cat 1>&2 /tmp/dldrconf.depmod.$$
  524.  
  525.     if [ ${res} -ne 0 ]; then
  526.         # only return error if one of our modules is at cause
  527.         grep -q "driverloader" /tmp/dldrconf.depmod.$$ || res=0
  528.     fi
  529.  
  530.     rm -f /tmp/dldrconf.depmod.$$
  531.  
  532.     return ${res}
  533. }
  534.  
  535. recompile_modules()
  536. {
  537.     KERNELSRC=/usr/src/linux
  538.     KERNELORG=""
  539.  
  540.     if [ -h /lib/modules/${OSKERNVERS}/build -a ! -d /lib/modules/${OSKERNVERS}/build/. ]; then
  541.         echo ""
  542.         echo "ERROR: /lib/modules/${OSKERNVERS}/build points to a missing directory"
  543.         echo ""
  544.         ls -l /lib/modules/${OSKERNVERS}/build
  545.         echo ""
  546.         echo "Please ensure that the kernel-headers or kernel-source package is installed."
  547.         return 1
  548.     fi
  549.  
  550.     if [ -d /lib/modules/${OSKERNVERS}/build/include ]; then
  551.         KERNELSRC=/lib/modules/${OSKERNVERS}/build
  552.     elif [ ! -d "${KERNELSRC}" -a -d "/usr/src/kernel-headers-${OSKERNVERS}" ]; then
  553.         # Debian
  554.         KERNELSRC=/usr/src/kernel-headers-${OSKERNVERS}
  555.     elif [ ! -d "${KERNELSRC}" -a -d "/usr/local/src/linux" ]; then
  556.         KERNELSRC=/usr/local/src/linux
  557.     elif [ ! -d "${KERNELSRC}" ]; then
  558.         echo "Please ensure that the kernel-headers or kernel-source package is installed."
  559.         if [ "${OSDISTNAME}" = Debian ]; then
  560.             echo "On Debian, try \"apt-get install kernel-headers-${OSKERNVERS}\""
  561.         fi
  562.     fi
  563.     if ! $automode; then
  564.         echo ""
  565.         echo "Where is the linux source build directory that matches your running kernel?"
  566.         echo -n "[${KERNELSRC}] "
  567.         read answer
  568.         case "${answer}" in
  569.         "")
  570.             ;;
  571.         *)
  572.             KERNELSRC="${answer}"
  573.             ;;
  574.         esac
  575.     fi
  576.  
  577.     if [ -e "${KERNELSRC}/scripts/Makefile.build" ]; then
  578.         use_kbuild=true
  579.     else
  580.         use_kbuild=false
  581.     fi
  582.  
  583.     if ! files_present \
  584.         "${KERNELSRC}/include/linux/autoconf.h" \
  585.         "${KERNELSRC}/include/linux/version.h" ||
  586.         (! ${use_kbuild} && ! files_present "${KERNELSRC}/include/linux/modversions.h"); then
  587.         echo ""
  588.         echo "WARNING: missing file ${missing_file}"
  589.         suspect_tree=true
  590.     elif ! right_version_file "${KERNELSRC}/include/linux/version.h"; then
  591.         echo ""
  592.         echo "WARNING: the kernel version (${FILEKERNELVER}) defined in"
  593.         echo "${KERNELSRC}/include/linux/version.h"
  594.         echo "does not match the currently running kernel (${OSKERNVERS})"
  595.         echo "The cause of this problem is an incorrect kernel source path."
  596.         echo "Please check that ${KERNELSRC} points to the right tree."
  597.         suspect_tree=true
  598.     else
  599.         suspect_tree=false
  600.     fi
  601.  
  602.     if ${suspect_tree}; then
  603.         echo "The cause of this problem is usually a missing or misconfigured"
  604.         echo "kernel source tree (and sometimes an incorrect directory or symbolic link)."
  605.         # SuSE has copies of autoconf.h and version.h available under /boot
  606.         if [ -d "${KERNELSRC}/include/linux" -a -f /boot/vmlinuz.autoconf.h -a -f /boot/vmlinuz.version.h ] && right_version_file /boot/vmlinuz.version.h && [ -f "${KERNELSRC}/include/linux/modversions.h" ]; then
  607.             echo ""
  608.             echo "However, proper /boot/vmlinuz.{autoconf.h,version.h} were found."
  609.             if ask_yesno "Would you like to try using them (in a temporary kernel tree)? [yes] " 0; then
  610.                 if ! create_temp_kernel_tree; then
  611.                     echo ""
  612.                     echo "Unable to create temporary kernel tree"
  613.                     kernelrebuild_instructions
  614.                     return 1
  615.                 fi
  616.                 rm -f "${KERNELSRC}/include/linux/.config" \
  617.                         "${KERNELSRC}/include/linux/autoconf.h" \
  618.                         "${KERNELSRC}/include/linux/version.h"
  619.                 if ! cp -p /boot/vmlinuz.autoconf.h "${KERNELSRC}/include/linux/autoconf.h" || \
  620.                     ! cp -p /boot/vmlinuz.version.h "${KERNELSRC}/include/linux/version.h"; then
  621.                     echo ""
  622.                     echo "Unable to copy files to temporary kernel tree"
  623.                     remove_temp_kernel_tree
  624.                     kernelrebuild_instructions
  625.                     return 1
  626.                 fi
  627.  
  628.                 # we don't really need .config but it can't hurt if available
  629.                 if [ -f /boot/vmlinuz.config ]; then
  630.                     cp -p /boot/vmlinuz.config "${KERNELSRC}/include/linux/.config"
  631.                 fi
  632.             fi
  633.         fi
  634.     fi
  635.  
  636.     # are we ok now?
  637.     if [ ! -f "${KERNELSRC}/include/linux/version.h" \
  638.             -o ! -f "${KERNELSRC}/include/linux/autoconf.h" ] || \
  639.             [ ! -f "${KERNELSRC}/include/linux/modversions.h" ] && ! ${use_kbuild}; then
  640.         remove_temp_kernel_tree
  641.         kernelrebuild_instructions
  642.         return 1
  643.     fi
  644.  
  645.     buildlogf=/tmp/dldrconfig-buildlog.txt
  646.  
  647.     # set FILEKERNELVER if it isn't already
  648.     [ -n "${FILEKERNELVER}" ] || right_version_file "${KERNELSRC}/include/linux/version.h"
  649.  
  650.     echo ""
  651.     echo "Building modules for kernel ${FILEKERNELVER}, using source directory"
  652.     echo "${KERNELSRC}. Please wait..."
  653.  
  654.     (cd ${dldrlibdir}/modules && make "KERNELSRC=${KERNELSRC}" clean minstall) > ${buildlogf} 2>&1
  655.     res=$?
  656.  
  657.     (cd ${dldrlibdir}/modules && make "KERNELSRC=${KERNELSRC}" clean) >/dev/null 2>&1
  658.  
  659.     remove_temp_kernel_tree
  660.  
  661.     if [ $res -eq 0 ]; then
  662.         rm -f ${buildlogf}
  663.         return 0
  664.     else
  665.         echo ""
  666.         echo "ERROR: Module build failed!"
  667.         echo "Please examine the log file \"${buildlogf}\" to determine why."
  668.         return 1
  669.     fi
  670. }
  671.  
  672. modules_exist()
  673. {
  674.     files_present "/lib/modules/${OSKERNVERS}/misc/driverloader"*.${KO}
  675. }
  676.  
  677. remove_kernel_modules()
  678. {
  679.     modules_removed=false
  680.     for f in "/lib/modules/"*"/misc/driverloader"*.*o; do
  681.         if [ ! -e "${f}" ]; then
  682.             continue
  683.         fi
  684.         rm -f "${f}"
  685.         modules_removed=true
  686.     done
  687.  
  688.     if ${modules_removed}; then
  689.         echo ""
  690.         echo "Removed driverloader from /lib/modules/"
  691.         update_module_dependencies
  692.     fi
  693.     return 0
  694. }
  695.  
  696. binary_modules_avail()
  697. {
  698.     [ -d "${dldrlibdir}/modules/binaries/$1" ]
  699. }
  700.  
  701. configure_kernel()
  702. {
  703.     check_kernel || return $?
  704.  
  705.     if modules_exist; then
  706.         echo ""
  707.         echo "Warning: existing driver modules found under:"
  708.         echo "    /lib/modules/${OSKERNVERS}/misc/"
  709.         if ask_yesno "Would you like to keep using them? [no] " 1; then
  710.             return 0
  711.         fi
  712.     fi
  713.  
  714.     chosen_binary_modules=""
  715.     if binary_modules_avail "${OSKERNTYPE}/${OSDISTIDNT}/${OSKERNNAME}-${OSKERNVERS}${OSKERNSMP}"; then
  716.         chosen_binary_modules="${OSKERNTYPE}/${OSDISTIDNT}/${OSKERNNAME}-${OSKERNVERS}${OSKERNSMP}"
  717.     fi
  718.  
  719.     if [ -n "${chosen_binary_modules}" ]; then
  720.         echo ""
  721.         echo "Pre-built driver modules that seem compatible with your system were found under"
  722.         echo "${dldrlibdir}/modules/binaries/${chosen_binary_modules}."
  723.  
  724.         if ask_yesno "Would you like to use them? [yes] " 0; then
  725.             if use_prebuilt_modules "${chosen_binary_modules}"; then
  726.                 dldrstop # unload any old modules loaded
  727.                 update_module_dependencies || return $?
  728.                 return 0
  729.             fi
  730.         fi
  731.     else
  732.         echo ""
  733.         echo "No pre-built modules for: ${OSDISTNAME}-${OSDISTVERS} ${OSKERNNAME}-${OSKERNVERS} ${OSKERNTYPE}${OSKERNSMP}"
  734.     fi
  735.  
  736.     if [ -f ${dldrlibdir}/modules/Makefile ]; then
  737.         echo ""
  738.         echo "Trying to automatically build the driver modules..."
  739.         echo "(this requires a C compiler and proper kernel sources to be installed)"
  740.  
  741.         if recompile_modules; then
  742.                 dldrstop # unload any old modules loaded
  743.                 update_module_dependencies || return $?
  744.                 echo "done."
  745.                 return 0
  746.         fi
  747.     else
  748.         echo ""
  749.         echo "Please obtain the appropriate variant of this package for your system"
  750.         echo "or try the generic RPM or tar version."
  751.     fi
  752.  
  753.     return 1
  754. }
  755.  
  756. modconf_filter_mine()
  757. {
  758.     if [ "$1" = all ]; then
  759.         regex="[a-zA-Z][a-zA-Z]*[0-9][0-9]*"
  760.     else
  761.         regex=""
  762.         for n in "${parm_netifname[@]}"; do
  763.             if [ -z "${n}" ]; then
  764.                 continue
  765.             fi
  766.             if [ -n "${regex}" ]; then
  767.                 regex="${regex}|${n}"
  768.             else
  769.                 regex="${n}"
  770.             fi
  771.         done
  772.     fi
  773.  
  774.     egrep -v "^(alias[     ][     ]*(${regex})[     ][     ]*driverloader)|(options[^#]*driverloader)"
  775. }
  776.  
  777. unconfigure_mods()
  778. {
  779.     if [ -f /etc/modutils/driverloader ]; then
  780.         rm -f /etc/modutils/driverloader
  781.         update-modules
  782.     elif [ -f /etc/modules.d/driverloader ]; then
  783.         rm -f /etc/modules.d/driverloader
  784.         update-modules
  785.     else
  786.         if modconf_filter_mine all < ${modulesconf} > ${modulesconf}.$$; then
  787.             cp ${modulesconf}.$$ ${modulesconf}
  788.         fi
  789.  
  790.         rm -f ${modulesconf}.$$
  791.     fi
  792.  
  793.     if [ -n "${modprobeconf}" -a -f "${modprobeconf}" ]; then
  794.         if modconf_filter_mine all < ${modprobeconf} > ${modprobeconf}.$$; then
  795.             cp ${modprobeconf}.$$ ${modprobeconf}
  796.         fi
  797.  
  798.         rm -f ${modprobeconf}.$$
  799.     fi
  800. }
  801.  
  802. mod_aliases_and_options()
  803. {
  804.     for n in "${parm_netifname[@]}"; do
  805.         if [ -z "${n}" ]; then
  806.             continue
  807.         fi
  808.         if ! modprobe -c 2> /dev/null | grep -q "^alias[     ][     ]*${n}[     ]"; then
  809.             echo "alias ${n} driverloader"
  810.         fi
  811.         if [ "${OSDISTNAME}" = "SuSE" -a -d "/etc/sysconfig/network" -a ! -e "/etc/sysconfig/network/ifcfg-${n}" ]; then
  812.             # Create empty ifcfg so that YaST detects the interface
  813.             touch /etc/sysconfig/network/ifcfg-${n}
  814.         fi
  815.     done
  816. }
  817.  
  818. configure_mods()
  819. {
  820.     if [ "`sysctl -n kernel.modprobe`" = "/bin/true" ]; then
  821.         echo ""
  822.         echo "WARNING: kernel.modprobe parameter set to /sbin/true; automatic module loading will not work!"
  823.         if [ "${ksyms}" = "kallsyms" ]; then
  824.             echo "The cause of this problem is usually a check for /proc/ksyms (2.4) instead of /proc/kallsyms (2.6)"
  825.             if [ -e /etc/rc.d/rc.sysinit ]; then
  826.                 echo "possibly in /etc/rc.d/rc.sysinit"
  827.             else
  828.                 echo "in the system's startup scripts"
  829.             fi
  830.         fi
  831.     fi
  832.  
  833.     if [ -d /etc/modutils -a -x /sbin/update-modules ]; then
  834.         # Debian
  835.         runupdatemodules=true
  836.         outmodulesconf=/etc/modutils/driverloader
  837.     elif [ -d /etc/modules.d -a -x /usr/sbin/update-modules ]; then
  838.         # Gentoo
  839.         runupdatemodules=true
  840.         outmodulesconf=/etc/modules.d/driverloader
  841.     else
  842.         runupdatemodules=false
  843.         outmodulesconf=/tmp/dldrmodconf.$$
  844.     fi
  845.  
  846.     mod_aliases_and_options modulesconf > ${outmodulesconf}
  847.  
  848.     if ${runupdatemodules}; then
  849.         update-modules
  850.     else
  851.         if cat ${modulesconf} ${outmodulesconf} > ${modulesconf}.$$; then
  852.             if ! cmp --silent ${modulesconf}.$$ ${modulesconf}; then
  853.                 if ! cp ${modulesconf}.$$ ${modulesconf}; then
  854.                     rm -f ${modulesconf}.$$ ${outmodulesconf}
  855.                     exit 1
  856.                 fi
  857.             fi
  858.         fi
  859.  
  860.         rm -f ${modulesconf}.$$ ${outmodulesconf}
  861.     fi
  862.  
  863.     if [ -n "${modprobeconf}" ]; then
  864.         outmodprobeconf=/tmp/dldrmodconf.$$
  865.         mod_aliases_and_options > ${outmodprobeconf}
  866.  
  867.         if cat ${modprobeconf} ${outmodprobeconf} > ${modprobeconf}.$$; then
  868.             if ! cmp --silent ${modprobeconf}.$$ ${outmodprobeconf}; then
  869.                 if ! cp ${modprobeconf}.$$ ${modprobeconf}; then
  870.                     rm -f ${modprobeconf}.$$ ${outmodprobeconf}
  871.                     exit 1
  872.                 fi
  873.             fi
  874.         fi
  875.  
  876.         rm -f ${modprobeconf}.$$ ${outmodprobeconf}
  877.     fi
  878. }
  879.  
  880. identify_system()
  881. {
  882.     OSDISTNAME=unknown
  883.     OSDISTIDNT=unknown
  884.     OSDISTVERS=unknown
  885.  
  886.     if [ -f /etc/debian_version ]; then
  887.         OSDISTNAME=Debian
  888.         OSDISTIDNT=deb
  889.         read OSDISTVERS < /etc/debian_version
  890.     elif [ -f /etc/slackware-version ]; then
  891.         OSDISTNAME=Slackware
  892.         OSDISTIDNT=slack
  893.         OSDISTVERS="`${AWK} '{print $1; exit}' /etc/slackware-version`"
  894.     elif [ -f /etc/conectiva-release ]; then
  895.         OSDISTNAME=Conectiva
  896.         OSDISTIDNT=conectiva
  897.     elif [ -f /etc/SuSE-release ]; then
  898.         OSDISTNAME=SuSE
  899.         OSDISTIDNT=suse
  900.         OSDISTVERS="`sed -n '/^VERSION/s/^.*=[     ]*//p' < /etc/SuSE-release`"
  901.     elif [ -f /etc/mandrake-release ]; then
  902.         OSDISTNAME=Mandrake
  903.         OSDISTIDNT=mdk
  904.     #it would be better to use rpm instead of sed but it doesn't work
  905.     #recursively (due to database locking) when this script is called during
  906.     #the package's installation
  907.     #    OSDISTVERS="`rpm -q --queryformat '%{VERSION}\n' mandrake-release | sort -r | head -1`"
  908.         OSDISTVERS="`sed -n '/release /{s/^.*release  *\([^ ]*\)/\1/;s/ .*//;p;q;}' < /etc/mandrake-release`"
  909.     #elif [ -f /etc/yellowdog-release ]; then
  910.     #    OSDISTNAME=YellowDog
  911.     elif [ -f /etc/turbolinux-release ]; then
  912.         OSDISTNAME=Turbolinux
  913.         OSDISTIDNT=turbo
  914.         OSDISTVERS="`sed -n '/release /{s/^.*release  *\([^ ]*\)/\1/;s/ .*//;p;q;}' < /etc/turbolinux-release`"
  915.         if [ -z "${OSDISTVERS}" ]; then
  916.             OSDISTVERS="`sed -n '/[a-zA-Z][a-zA-Z]* /{s/^.*[a-zA-Z][a-zA-Z]*  *\([^ ]*\)/\1/;s/ .*//;p;q;}' < /etc/turbolinux-release`"
  917.         fi
  918.     elif [ -f /etc/fedora-release ]; then
  919.         OSDISTNAME=Fedora
  920.         OSDISTIDNT=fdr
  921.         OSDISTVERS="`sed -n '/release /{s/^.*release  *\([^ ]*\)/\1/;s/ .*//;p;q;}' < /etc/fedora-release`"
  922.     elif [ -f /etc/redhat-release ]; then
  923.         OSDISTNAME=RedHat
  924.         OSDISTIDNT=rh
  925.         OSDISTVERS="`sed -n '/release /{s/^.*release  *\([^ ]*\)/\1/;s/ .*//;p;q;}' < /etc/redhat-release`"
  926.     elif [ -d /var/lib/LST ]; then
  927.         OSDISTNAME=Caldera
  928.         OSDISTIDNT=caldera
  929.     fi
  930.  
  931.     OSKERNNAME="`uname -s | tr '[A-Z]' '[a-z]'`"
  932.     OSKERNARCH="`uname -m`"
  933.     if [ -r /boot/kernel.h ]; then
  934.         OSKERNTYPE="`sed -n '/^#define[     ]__MODULE_KERNEL_/s/^#define[     ]__MODULE_KERNEL_\([^     ]*\)[     ]*.*/\1/p' </boot/kernel.h`"
  935.     fi
  936.     if [ -z "${OSKERNTYPE}" ]; then
  937.         OSKERNTYPE="${OSKERNARCH}"
  938.     fi
  939.     OSKERNVERS="`uname -r`"
  940.  
  941.     case "${OSKERNVERS}" in
  942.     2.[234]*)
  943.         KO=o
  944.         ksyms=ksyms
  945.         ;;
  946.     *)
  947.         KO=ko
  948.         ksyms=kallsyms
  949.         ;;
  950.     esac
  951.  
  952.     if uname -v | grep -q SMP; then
  953.         OSKERNSMP="-SMP"
  954.     else
  955.         OSKERNSMP=""
  956.     fi
  957.  
  958.     if [ -r /proc/ksyms ] && [ `egrep -c '_[0-9a-f]{8}$' /proc/ksyms` -gt 100 ]; then
  959.         OSKERNMODV="-MODVERS"
  960.     else
  961.         OSKERNMODV=""
  962.     fi
  963.  
  964.     echo "$OSKERNNAME-$OSKERNARCH($OSKERNTYPE)-$OSKERNVERS$OSKERNSMP$OSKERNMODV $OSDISTNAME-$OSDISTVERS"
  965. }
  966.  
  967. dump_cmd()
  968. {
  969.     echo ""
  970.     echo "${dumpprefix} $*"
  971.     eval $@
  972. }
  973.  
  974. dump_file()
  975. {
  976.     dump_cmd cat -v $@
  977. }
  978.  
  979. dump_diagnostics()
  980. {
  981.     dumpprefix="+"
  982.  
  983.     > "${dldrdiagfile}" || return $?
  984.  
  985.     if ! ${noprobe}; then
  986.         echo ""
  987.         echo "Probing \"driverloader\"..."
  988.         (
  989.             dump_cmd dldrstop
  990.             dump_cmd modprobe -v driverloader
  991.             dump_cmd lsmod
  992.         ) >> "${dldrdiagfile}" 2>&1
  993.     fi
  994.  
  995.     echo ""
  996.     echo "Dumping system diagnostic information..."
  997.  
  998.     case "${dldrdiagfile}" in
  999.     *longdiag*)
  1000.         longdiag=true
  1001.         ;;
  1002.     *)
  1003.         longdiag=false
  1004.         ;;
  1005.     esac
  1006.  
  1007.     (
  1008.         dump_cmd date
  1009.         dump_cmd $0 --info
  1010.         dump_cmd identify_system
  1011.         dump_cmd uname -a
  1012.  
  1013.         dump_cmd gcc -v
  1014.  
  1015.         dump_file /proc/version
  1016.         dump_file /proc/cpuinfo
  1017.  
  1018.         for f in /etc/*_version /etc/*-version /etc/*-release; do
  1019.             if [ -r "${f}" ]; then
  1020.                 dump_file "${f}"
  1021.             fi
  1022.         done
  1023.  
  1024.         dump_cmd dmesg
  1025.         if dmesg | grep -qi 'panic'; then
  1026.             dump_cmd dmesg | ksymoops
  1027.         fi
  1028.  
  1029.         for f in /var/log/driverloader /etc/sysconfig/network-scripts/ifcfg-* /etc/sysconfig/network/ifcfg-*; do
  1030.             if [ -r "${f}" ]; then
  1031.                 dump_file "${f}"
  1032.             fi
  1033.         done
  1034.  
  1035.         dump_cmd iwconfig --version
  1036.         dump_cmd iwconfig
  1037.         dump_cmd iwlist accesspoints
  1038.         dump_cmd iwlist scanning
  1039.         dump_cmd iwlist scanning
  1040.         dump_cmd iptables -L -n -v
  1041.         dump_cmd ifconfig -a
  1042.         dump_cmd netstat -rn
  1043.         dump_cmd netstat -in
  1044.         dump_cmd ip addr
  1045.         dump_cmd ip rule
  1046.         dump_cmd ip route
  1047.  
  1048.         dump_cmd lspci -n
  1049.         dump_cmd lspci -v
  1050.         dump_cmd lspci -n -vvv
  1051.  
  1052.         for p in pci cmdline uptime \
  1053.             devices misc filesystems interrupts \
  1054.             iomem ioports dma mtrr \
  1055.             partitions mounts swaps meminfo \
  1056.             stat apm modules
  1057.         do
  1058.             dump_file /proc/${p}
  1059.         done
  1060.  
  1061.         dump_cmd env
  1062.  
  1063.         dump_cmd sysctl -a
  1064.         dump_cmd modprobe -V
  1065.         dump_cmd modprobe -l "*driverloader*"
  1066.         dump_file "${modulesconf}"
  1067.         if [ -n "${modprobeconf}" ]; then
  1068.             dump_file "${modprobeconf}"
  1069.         fi
  1070.         dump_cmd depmod -e -a
  1071.  
  1072.         dump_cmd "cd ${dldrcnfdir} && find . -ls"
  1073.         dump_cmd "cd ${dldrcnfdir} && find . -print -type f -exec cat {} \;"
  1074.  
  1075.         dump_cmd "cd ${dldrnvmdir} && find . -ls"
  1076.         dump_cmd "cd ${dldrnvmdir} && find . -print -type f -exec cat {} \;"
  1077.  
  1078.         dump_cmd ls -lR "${dldrlibdir}/."
  1079.  
  1080.         dump_cmd "( cd ${dldrlibdir} && for f in webconfd webconfdocs/cgi-bin/*.cgi; do \
  1081.                     perl -c \${f}; done )"
  1082.  
  1083.         dump_cmd ls -lR "${dldrvardir}/."
  1084.  
  1085.         dump_cmd "cd ${dldrvardir} && find . -name '*.inf' -type f -print -exec cat {} \;"
  1086.         dump_cmd "cd ${dldrvardir} && find . -name '*.sys' -type f -print -exec strings -e l {} \;"
  1087. #        for f in ${dldrvardir}/*.inf; do
  1088. #            if [ -r "${f}" ]; then
  1089. #                dump_file "${f}"
  1090. #            fi
  1091. #        done
  1092. #        for f in ${dldrvardir}/*.sys; do
  1093. #            if [ -r "${f}" ]; then
  1094. #                dump_cmd strings -e l "${f}"
  1095. #            fi
  1096. #        done
  1097.  
  1098.         dump_cmd ls -lR /lib/modules/${OSKERNVERS}/misc
  1099.  
  1100.         if ${longdiag}; then
  1101.             for p in slabinfo ${ksyms}
  1102.             do
  1103.                 dump_file /proc/${p}
  1104.             done
  1105.  
  1106.             dump_file /lib/modules/${OSKERNVERS}/build/.config
  1107.             dump_file /lib/modules/${OSKERNVERS}/build/include/linux/version.h
  1108.             dump_file /lib/modules/${OSKERNVERS}/build/include/linux/autoconf.h
  1109.             dump_file /lib/modules/${OSKERNVERS}/build/include/linux/autoconf-up.h
  1110.             dump_file /lib/modules/${OSKERNVERS}/build/include/linux/rhconfig.h
  1111.             dump_file /lib/modules/${OSKERNVERS}/build/include/linux/modules/ksyms.ver
  1112.  
  1113.             dump_file /boot/vmlinuz.version.h
  1114.             dump_file /boot/vmlinuz.autoconf.h
  1115.             dump_file /boot/vmlinuz.config
  1116.  
  1117.             dump_file /boot/kernel.h
  1118.  
  1119.             dump_cmd ls -lR /etc/.
  1120.             dump_cmd ls -lR /lib/modules/.
  1121.             dump_cmd ls -lR /boot/.
  1122.  
  1123.             dump_cmd ls -l /usr/src/linux/include/.
  1124.             dump_cmd ls -l /usr/src/linux/include/linux/.
  1125.             dump_cmd ls -l /usr/src/linux/include/asm-i386/.
  1126.             dump_cmd ls -l /usr/include/. /usr/src/.
  1127.  
  1128.             dump_cmd env
  1129.  
  1130.             dump_cmd ps -efw
  1131.  
  1132.             dump_cmd sh --version
  1133.             dump_cmd sed --version
  1134.             dump_cmd ${AWK} --version
  1135.             dump_cmd printf --version
  1136.  
  1137.             dump_cmd tar --version
  1138.  
  1139.             dump_cmd rpm --version
  1140.             dump_cmd rpm --showrc
  1141.             dump_cmd rpm --query --all
  1142.         fi
  1143.  
  1144.     ) >> "${dldrdiagfile}" 2>&1
  1145.  
  1146.     if [ -f "${dldrdiagfile}" ]; then
  1147.         echo ""
  1148.         echo "System diagnostic information has been saved to the file:"
  1149.         echo ""
  1150.         ls -l ${dldrdiagfile}
  1151.         echo ""
  1152.         echo "As it could contain private information about this system, we recommend that"
  1153.         echo "you verify its contents before sending it to third parties."
  1154.     fi
  1155. }
  1156.  
  1157. read_netif_parms()
  1158. {
  1159.     netifname="$1"
  1160.  
  1161.     parm_hwinst[${netif}]="none"
  1162.     parm_hwid[${netif}]="unknown"
  1163.     parm_licowner[${netif}]="${lastowner}"
  1164.     parm_lickey[${netif}]="00000000"
  1165.     parm_licstatus[${netif}]="unknown"
  1166.     parm_drvname[${netif}]=""
  1167.     parm_vendordsc[${netif}]=""
  1168.     parm_driverdsc[${netif}]=""
  1169.     parm_adaptermdl[${netif}]=""
  1170.     parm_netifname[${netif}]="${netifname}"
  1171.     parm_netdevname[${netif}]=""
  1172.  
  1173.     if [ ! -d "${procdrvdir}/${netifname}" ]; then
  1174.         echo ""
  1175.         echo 1>&2 "ERROR: no adapter found (interface ${netifname})"
  1176.         return 1
  1177.     fi
  1178.  
  1179.     read parm_hwinst[${netif}] < ${procdrvdir}/${netifname}/hwinst
  1180.  
  1181.     read parm_hwid[${netif}] < ${procdrvdir}/${netifname}/hwaddr
  1182.     parm_drvname[${netif}]="`sed -n '/^DriverName=/ s/\"//g; s/^DriverName=//p' < \"${dldrcnfdir}/${parm_hwid[${netif}]}\"`"
  1183.     parm_vendordsc[${netif}]="`sed -n '/^VendorDesc=/ s/\"//g; s/^VendorDesc=//p' < \"${dldrcnfdir}/${parm_hwid[${netif}]}\"`"
  1184.     parm_driverdsc[${netif}]="`sed -n '/^DriverDesc=/ s/\"//g; s/^DriverDesc=//p' < \"${dldrcnfdir}/${parm_hwid[${netif}]}\"`"
  1185.     parm_driverver[${netif}]="`sed -n '/^DriverVersion=/ s/\"//g; s/^DriverVersion=//p' < \"${dldrcnfdir}/${parm_hwid[${netif}]}\"`"
  1186.     parm_adapterdsc[${netif}]="`sed -n '/^AdapterDesc=/ s/\"//g; s/^AdapterDesc=//p' < \"${dldrcnfdir}/${parm_hwid[${netif}]}\"`"
  1187.     parm_adaptermdl[${netif}]="`sed -n '/^AdapterModel=/ s/\"//g; s/^AdapterModel=//p' < \"${dldrcnfdir}/${parm_hwid[${netif}]}\"`"
  1188.     parm_netdevname[${netif}]="`sed -n '/^DriverLoaderNetDevName=/ s/\"//g; s/^DriverLoaderNetDevName=//p' < \"${dldrcnfdir}/${parm_hwid[${netif}]}\"`"
  1189.  
  1190.     if ${isfreeversion}; then
  1191.         sawinvalidlicenses=true
  1192.     else
  1193.         read parm_licstatus[${netif}] < ${procdrvdir}/${netifname}/licstatus
  1194.  
  1195.         if [ -f "${dldrnvmdir}/${parm_hwid[${netif}]}" ]; then
  1196.             parm_lickey[${netif}]="`sed -n '/^LicenseKey=/ s/\"//g; s/^LicenseKey=0x//p' < \"${dldrnvmdir}/${parm_hwid[${netif}]}\"`"
  1197.             parm_licowner[${netif}]="`sed -n '/^LicenseOwner=/ s/\"//g; s/^LicenseOwner=//p' < \"${dldrnvmdir}/${parm_hwid[${netif}]}\"`"
  1198.             if [ -z "${parm_licowner[${netif}]}" ]; then
  1199.                 parm_licowner[${netif}]="unknown"
  1200.             fi
  1201.             [ -n "${parm_licowner[${netif}]}" -a "${parm_licowner[${netif}]}" != "unknown" ] && lastowner="${parm_licowner[${netif}]}"
  1202.         fi
  1203.  
  1204.         case "${parm_licstatus[${netif}]}" in
  1205.         *INVALID* | *EXPIRED*)
  1206.             sawinvalidlicenses=true
  1207.             ;;
  1208.         *)
  1209.             ;;
  1210.         esac
  1211.     fi
  1212.  
  1213.     return 0
  1214. }
  1215.  
  1216. ensure_driver_present()
  1217. {
  1218.     if [ ! -f ${dldrcnfdir}/.perlmodsok ]; then
  1219.     (
  1220.         perlmodsok=true
  1221.         cd ${dldrlibdir}
  1222.         for f in webconfd webconfdocs/cgi-bin/*.cgi; do
  1223.             if ! perl -c ${f} >/tmp/dldrconf.perl.$$ 2>&1; then
  1224.                 perlmodsok=false
  1225.                 echo ""
  1226.                 cat /tmp/dldrconf.perl.$$ 1>&2
  1227.                 echo ""
  1228.                 echo 1>&2 "ERROR: perl module syntax checking failed. Web configurator will not work"
  1229.                 echo "Perhaps you need to install the \"perl-CGI\" package to fix this problem"
  1230.                 break
  1231.             fi
  1232.         done
  1233.         rm -f /tmp/dldrconf.perl.$$
  1234.         ${perlmodsok} && touch ${dldrcnfdir}/.perlmodsok
  1235.     )
  1236.     fi
  1237.     if [ ! -d ${procdrvdir} ]; then
  1238.         modprobe driverloader >/dev/null 2>&1 # ensure drv loaded
  1239.         if [ ! -d ${procdrvdir} ]; then
  1240.             #echo ""
  1241.             #echo 1>&2 "ERROR: driverloader not active"
  1242.             return 1
  1243.         fi
  1244.     fi
  1245.     return 0
  1246. }
  1247.  
  1248. read_parms()
  1249. {
  1250.     sawinvalidlicenses=false
  1251.     
  1252.     if [ -s "${dldrnvmdir}/webconf" ]; then
  1253.         read parm_webconf < "${dldrnvmdir}/webconf"
  1254.         parm_webconfport="`echo \"${parm_webconf}\" | awk -F: '{print $2}'`"
  1255.     else
  1256.         parm_webconf=""
  1257.         parm_webconfport=""
  1258.     fi
  1259.  
  1260.     ensure_driver_present || return $?
  1261.  
  1262.     numnetifs=0
  1263.  
  1264.     netifs="${specificnetif}"
  1265.     if [ -z "${netifs}" ]; then
  1266.         netifs="`find ${procdrvdir} -maxdepth 1 -type d | sed -n -e \"s@${procdrvdir}/*@@\" -e '/^..*/p'`"
  1267.  
  1268.         if [ -z "${netifs}" ]; then
  1269.             echo ""
  1270.             echo 1>&2 "No devices detected by driverloader"
  1271.             return 1
  1272.         fi
  1273.     fi
  1274.  
  1275.     for n in ${netifs}; do
  1276.         netif=${numnetifs}
  1277.         read_netif_parms ${n} || return $?
  1278.         numnetifs=`expr ${numnetifs} + 1`
  1279.     done
  1280.     rereadparms=false
  1281. }
  1282.  
  1283. show_netif_parms()
  1284. {
  1285.     echo ""
  1286.     if [ -n "${parm_netdevname[${netif}]}" -a "${parm_netdevname[${netif}]}" != "${parm_netifname[${netif}]}" ]; then
  1287.         echo "Wireless interface name: ${parm_netifname[${netif}]} (format \"${parm_netdevname[${netif}]}\")"
  1288.     else
  1289.         echo "Wireless interface name: ${parm_netifname[${netif}]}"
  1290.     fi
  1291.     echo "    MAC address    : ${parm_hwid[${netif}]}"
  1292.     echo "    Device instance: ${parm_hwinst[${netif}]}"
  1293.     if [ -n "${parm_drvname[${netif}]}" ]; then
  1294.         echo "    Device driver  : ${parm_drvname[${netif}]}"
  1295.     fi
  1296.     if [ -n "${parm_driverver[${netif}]}" ]; then
  1297.         echo "    Driver Version : ${parm_driverver[${netif}]}"
  1298.     fi
  1299.     if [ -n "${parm_vendordsc[${netif}]}" ]; then
  1300.         echo "    Description    : ${parm_vendordsc[${netif}]}"
  1301.     fi
  1302.     if [ -n "${parm_driverdsc[${netif}]}" ]; then
  1303.         echo "    Description    : ${parm_driverdsc[${netif}]}"
  1304.     fi
  1305.     if [ -n "${parm_adapterdsc[${netif}]}" ]; then
  1306.         echo "    Description    : ${parm_adapterdsc[${netif}]}"
  1307.     fi
  1308.     if [ -n "${parm_adaptermdl[${netif}]}" ]; then
  1309.         echo "    Adapter model  : ${parm_adaptermdl[${netif}]}"
  1310.     fi
  1311.     if ! ${isfreeversion}; then
  1312.         echo "    License owner  : ${parm_licowner[${netif}]}"
  1313.         echo "    License key    : `keytodisp \"${parm_lickey[${netif}]}\"`"
  1314.         echo "    License status : ${parm_licstatus[${netif}]}"
  1315.     fi
  1316. }
  1317.  
  1318. show_intro()
  1319. {
  1320.     echo "Linuxant DriverLoader for Wireless LAN devices, version ${dldrversion}"
  1321.  
  1322.     case "${dldrversion}" in
  1323.     *beta*)
  1324.         (
  1325.         echo ""
  1326.         echo "WARNING: this is an EXPERIMENTAL BETA VERSION. USE AT YOUR OWN RISK!"
  1327.         echo "See the file ${dldrlibdir}/LICENSE for details."
  1328.         ) 1>&2
  1329.         ;;
  1330.     esac
  1331. }
  1332.  
  1333. show_webconf_url()
  1334. {
  1335.     case "${parm_webconf}" in
  1336.     127.1:* | 127.0.0.1:* | localhost:*)
  1337.         echo "  http://127.0.0.1:${parm_webconfport}/"
  1338.         ;;
  1339.     0.0.0.0* | "*"*)
  1340.         echo "  http://127.0.0.1:${parm_webconfport}/ or http://`hostname`:${parm_webconfport}/"
  1341.         ;;
  1342.     *)
  1343.         echo "  http://${parm_webconf}/"
  1344.         ;;
  1345.     esac
  1346.  
  1347.     ensure_driver_present
  1348. }
  1349.  
  1350. show_finish_info()
  1351. {
  1352.     givewebconfurl="$1"
  1353.  
  1354.     (
  1355.         echo ""
  1356.         echo "If you need license keys, assistance or more information, please go to:"
  1357.         echo "    http://www.linuxant.com/"
  1358.         echo ""
  1359.         echo "When reporting a problem for the first time, please send"
  1360.         echo "us the file generated by \"dldrconfig --dumpdiag\"."
  1361.     ) 1>&2
  1362.     if ${givewebconfurl}; then
  1363.         (
  1364.         case "${parm_webconf}" in
  1365.         ?*:?*)
  1366.             echo ""
  1367.             echo "To complete the installation, please point your browser to:"
  1368.             show_webconf_url
  1369.             ;;
  1370.         *)
  1371.             echo ""
  1372.             echo "Web configurator disabled; please re-enable it with \"dldrconfig --webconf\""
  1373.             echo "or complete the installation manually."
  1374.             ;;
  1375.         esac
  1376.         ) 1>&2
  1377.     fi
  1378. }
  1379.  
  1380.  
  1381. show_usage_and_exit()
  1382. {
  1383.     show_intro
  1384.  
  1385.     cat 1>&2 << EOT
  1386.  
  1387. Usage: `basename $0` [options]
  1388.  
  1389.   --netif=<name>               Select specific network interface
  1390.   -k, --kernel                 Build and install kernel modules
  1391.   -m, --modalias               Add module aliases
  1392.  
  1393.   -i, --info                   Show current configuration information
  1394.  
  1395.   -l, --license[=<owner/key>]  Set license key
  1396.  
  1397.   --netdevname[=<format>]      Set network interface name format
  1398.                                (%d is substituted with instance number, so
  1399.                                "eth%d" automatically becomes eth0, eth1, etc..)
  1400.  
  1401.   --webconf[=<addr:port>]      Set listen address for web configurator
  1402.                                Defaults to 127.0.0.1:18020
  1403.                                Use "off" to disable it completely,
  1404.                                or "*:18020" to make it accessible from
  1405.                                other machines (not recommended).
  1406.  
  1407.   --newinstance=<hwinst>       Add new device instance (used internally)
  1408.   --verifymac=<macaddr>        Ensure macaddr == hwinst (used internally)
  1409.  
  1410.   -d, --dumpdiag[=<file>]      Probe driver modules and dump system diagnostic
  1411.                                information to <file>
  1412.                                (default: ${dldrdiagfile})
  1413.  
  1414.   -N, --noprobe                Do dumpdiag without probing modules (safer)
  1415.  
  1416.   -a, --auto                   Run in automatic mode, without prompting user
  1417.   -r, --remove                 Remove kernel modules and related config
  1418.  
  1419.   -h, --help                   This small usage guide
  1420.   -V, --version                Show version
  1421.  
  1422. Default options if none selected: --kernel --modalias --license --info
  1423. EOT
  1424.     exit 1
  1425. }
  1426.  
  1427. # end of functions; execution starts here
  1428.  
  1429. PATH=/usr/sbin:/sbin:/usr/bin:/bin:/usr/local/sbin:/usr/local/bin
  1430. export PATH
  1431.  
  1432. unset LANG
  1433.  
  1434. umask 022
  1435.  
  1436. dldrlibdir="/usr/lib/driverloader"
  1437. dldrvardir="/var/lib/driverloader"
  1438. dldretcdir="/etc/driverloader"
  1439. dldrnvmdir="/etc/driverloader/static"
  1440. dldrcnfdir="/etc/driverloader/config"
  1441. dldrinfdir="/tmp/no/longer/used"
  1442. dldrinffil="/tmp/no/longer/used"
  1443. dldrversion="1.57"
  1444.  
  1445. if which gawk >/dev/null 2>&1; then
  1446.     AWK=gawk
  1447. else
  1448.     AWK=awk
  1449. fi
  1450.  
  1451. identify_system >/dev/null
  1452.  
  1453. if id -u >/dev/null 2>&1; then
  1454.     if [ "`id -u`" != 0 ]; then
  1455.         echo 1>&2 "$0: root priviledges required."
  1456.         echo 1>&2 "Please run \"su - root\" before this command."
  1457.         exit 1
  1458.     fi
  1459. fi
  1460.  
  1461. case "${dldrversion}" in
  1462. *free*)
  1463.     isfreeversion=true
  1464.     ;;
  1465. *)
  1466.     isfreeversion=false
  1467.     ;;
  1468. esac
  1469.  
  1470. dldrdiagfile="/tmp/driverloaderdiag.txt"
  1471.  
  1472. if [ -f /etc/modules.conf ]; then
  1473.     modulesconf=/etc/modules.conf
  1474.     if [ -f "${modulesconf}.local" ]; then
  1475.         # SuSE 9.0
  1476.         modulesconf="${modulesconf}.local"
  1477.     fi
  1478. elif [ -f /etc/conf.modules ]; then
  1479.     modulesconf=/etc/conf.modules
  1480. else
  1481.     # create /etc/modules.conf if it doesn't exist
  1482.     modulesconf=/etc/modules.conf
  1483.     touch ${modulesconf}
  1484. fi
  1485.  
  1486. if [ -f /etc/modprobe.conf ]; then
  1487.     modprobeconf=/etc/modprobe.conf
  1488.     if [ -f "${modprobeconf}.local" ]; then
  1489.         # SuSE 9.0
  1490.         modprobeconf="${modprobeconf}.local"
  1491.     fi
  1492. elif which generate-modprobe.conf >/dev/null 2>&1; then
  1493.     modprobeconf=/etc/modprobe.conf
  1494.     # create /etc/modprobe.conf if it doesn't exist
  1495.     touch ${modprobeconf}
  1496. fi
  1497.  
  1498. TEMP=`getopt -a -o C::M::kmil::d::NarhV --long netif:,newinstance:,verifymac:,kernel,modalias,info,license::,netdevname::,webconf::,dumpdiag::,noprobe,auto,remove,help,version -n "\`basename $0\`" -- "$@"`
  1499. if [ $? != 0 ]; then
  1500.     show_usage_and_exit
  1501. fi
  1502.  
  1503. eval set -- "$TEMP"
  1504.  
  1505. automode=false
  1506. noprobe=false
  1507. do_cfgkernel=false
  1508. do_cfgmods=false
  1509. do_cfglicense=false
  1510. do_cfgnetdevname=false
  1511. do_cfgwebconf=false
  1512. do_cfgnewinstance=false
  1513. do_cfgverifymac=false
  1514. do_infocfg=false
  1515. do_dumpdiag=false
  1516. do_cfgremove=false
  1517. newinstance=""
  1518. verifymac=""
  1519. setnetdevname=""
  1520. setwebconf=""
  1521. setlicowner=""
  1522. setlicense=""
  1523. setdiagfile=""
  1524. specificnetif=""
  1525. lastowner="unknown"
  1526.  
  1527. explicitopt=false
  1528.  
  1529. while true ; do
  1530.     case "$1" in
  1531.         -a|--auto) automode=true; shift ;;
  1532.         --netif)
  1533.             explicitopt=true
  1534.             specificnetif="$2"
  1535.             shift 2
  1536.             ;;
  1537.         -k|--kernel) explicitopt=true; do_cfgkernel=true; shift ;;
  1538.         -m|--modalias) explicitopt=true; do_cfgmods=true; shift ;;
  1539.         --newinstance)
  1540.             explicitopt=true
  1541.             do_cfgnewinstance=true
  1542.             if [ -n "$2" ]; then
  1543.                 newinstance="$2"
  1544.             fi
  1545.             shift 2
  1546.             ;;
  1547.         --verifymac)
  1548.             explicitopt=true
  1549.             do_cfgverifymac=true
  1550.             if [ -n "$2" ]; then
  1551.                 verifymac="$2"
  1552.             fi
  1553.             shift 2
  1554.             ;;
  1555.         -l|--license)
  1556.             explicitopt=true
  1557.             do_cfglicense=true
  1558.             if [ -n "$2" ]; then
  1559.                 setlicense="$2"
  1560.             fi
  1561.             shift 2
  1562.             ;;
  1563.         --netdevname)
  1564.             explicitopt=true
  1565.             do_cfgnetdevname=true
  1566.             if [ -n "$2" ]; then
  1567.                 setnetdevname="$2"
  1568.             fi
  1569.             shift 2
  1570.             ;;
  1571.         --webconf)
  1572.             explicitopt=true
  1573.             do_cfgwebconf=true
  1574.             if [ -n "$2" ]; then
  1575.                 setwebconf="$2"
  1576.             fi
  1577.             shift 2
  1578.             ;;
  1579.         -i|--info)   explicitopt=true; do_infocfg=true; shift ;;
  1580.         -d|--dumpdiag)
  1581.             explicitopt=true
  1582.             do_dumpdiag=true
  1583.             setdiagfile="$2"
  1584.             shift 2
  1585.             ;;
  1586.         -N|--noprobe)
  1587.             explicitopt=true
  1588.             do_dumpdiag=true
  1589.             noprobe=true
  1590.             shift
  1591.             ;;
  1592.         -r|--remove) explicitopt=true; do_cfgremove=true; shift ;;
  1593.         -h|--help) show_usage_and_exit; shift ;;
  1594.         -V|--version) echo "${dldrversion}"; exit 0;;
  1595.         --) shift ; break ;;
  1596.         *) echo "Internal error!" ; exit 1 ;;
  1597.     esac
  1598. done
  1599.  
  1600. # Accept --license <name> as equivalent to --license=<name>
  1601. if ${do_cfglicense} && [ $# -ge 1 -a -z "${setlicense}" ]; then
  1602.     setlicense="$1"
  1603.     shift
  1604. fi
  1605.  
  1606. # Accept --netdevname <name> as equivalent to --netdevname=<name>
  1607. if ${do_cfgnetdevname} && [ $# -ge 1 -a -z "${setnetdevname}" ]; then
  1608.     setnetdevname="$1"
  1609.     shift
  1610. fi
  1611.  
  1612. # Accept --webconf <addr:port> as equivalent to --webconf=<addr:port>
  1613. if ${do_cfgwebconf} && [ $# -ge 1 -a -z "${setwebconf}" ]; then
  1614.     setwebconf="$1"
  1615.     shift
  1616. fi
  1617.  
  1618. # Accept --dumpdiag <file> as equivalent to --dumpdiag=<file>
  1619. if ${do_dumpdiag} && [ $# -ge 1 -a -z "${setdiagfile}" ]; then
  1620.     setdiagfile="$1"
  1621.     shift
  1622. fi
  1623.  
  1624. procdrvdir="/proc/driver/driverloader"
  1625.  
  1626. if [ $# -ne 0 ]; then
  1627.     echo 1>&2 "$0: extraneous arguments: $*"
  1628.     show_usage_and_exit
  1629. fi
  1630.  
  1631. # If nothing explicitely specified, configure everything
  1632. if ! ${explicitopt}; then
  1633.     do_cfgkernel=true
  1634.     do_cfgmods=true
  1635. #    if ! ${isfreeversion}; then
  1636.         do_cfglicense=true
  1637. #    fi
  1638.     do_infocfg=true
  1639. fi
  1640.  
  1641. if ! ${do_cfgremove} && ! ${do_cfgnewinstance} && ! ${do_cfgverifymac}; then
  1642.     show_intro
  1643. fi
  1644.  
  1645. if ${do_cfgremove}; then
  1646.     # modulesconf must be modified before remove_kernel_modules (depmod)
  1647.     unconfigure_mods || exit $?
  1648.     remove_kernel_modules || exit $?
  1649.     dldrstop
  1650.     DLDRHELPERACTION=stop /usr/lib/driverloader/webconfd
  1651.     rm -f ${dldrcnfdir}/PCI*.conf
  1652.     rm -f ${dldrcnfdir}/*:*
  1653.     rm -f ${dldrcnfdir}/.perlmodsok
  1654.     #rm -f ${dldrvardir}/*
  1655. fi
  1656.  
  1657. if ${do_cfgkernel}; then
  1658.     configure_kernel || exit $?
  1659. fi
  1660.  
  1661. rereadparms=true
  1662. if ${do_cfgmods} || ${do_cfglicense} || ${do_cfgnetdevname}; then
  1663.     if ! read_parms; then
  1664.         show_finish_info true
  1665.         exit 0
  1666.     fi
  1667. fi
  1668.  
  1669. if ${do_cfgmods}; then
  1670.     configure_mods || exit $?
  1671. fi
  1672.  
  1673. if ${do_cfglicense}; then
  1674.     netif=0; while [ ${netif} -lt ${numnetifs} ]; do
  1675.         configure_license
  1676.         res=$?
  1677.         if [ ${res} -ne 0 ] && ${explicitopt}; then
  1678.             exit ${res}
  1679.         fi
  1680.         netif=`expr ${netif} + 1`
  1681.     done
  1682.     do_infocfg=true
  1683. fi
  1684.  
  1685. if ${do_cfgwebconf}; then
  1686.     configure_webconf
  1687.     res=$?
  1688.     if [ ${res} -ne 0 ] && ${explicitopt}; then
  1689.         exit ${res}
  1690.     fi
  1691. fi
  1692.  
  1693. if ${do_cfgnetdevname}; then
  1694.     netif=0; while [ ${netif} -lt ${numnetifs} ]; do
  1695.         configure_netdevname
  1696.         res=$?
  1697.         if [ ${res} -ne 0 ] && ${explicitopt}; then
  1698.             exit ${res}
  1699.         fi
  1700.         netif=`expr ${netif} + 1`
  1701.     done
  1702.     do_infocfg=true
  1703. fi
  1704.  
  1705. if ${do_cfgverifymac}; then
  1706.     if [ -h "${dldrcnfdir}/${newinstance}" ]; then
  1707.         newinstlink="`ls -l \"${dldrcnfdir}/${newinstance}\" | sed 's/.*-> //'`"
  1708.     elif [ -f "${dldrcnfdir}/${newinstance}" ]; then
  1709.         # initial configuration
  1710.         mv "${dldrcnfdir}/${newinstance}" "${dldrcnfdir}/${verifymac}" || exit $?
  1711.         ln -s "${verifymac}" "${dldrcnfdir}/${newinstance}"
  1712.         exit $?
  1713.     else
  1714.         newinstlink=""
  1715.     fi
  1716.     if [ "${verifymac}" = "${newinstlink}" ]; then
  1717.         exit 0
  1718.     fi
  1719.     rm -f "${dldrcnfdir}/${newinstance}" || exit $?
  1720.     ln -s "${verifymac}" "${dldrcnfdir}/${newinstance}"
  1721.     exit 123
  1722. elif ${do_cfgnewinstance}; then
  1723.     for f in "${dldrvardir}"/*.inf; do
  1724.         if [ ! -f "${f}" ]; then
  1725.             continue
  1726.         fi
  1727.         dldrinfparse "$f" "${newinstance}" > "${dldrcnfdir}/${newinstance}".tmp
  1728.         if [ $? = 0 -a -s "${dldrcnfdir}/${newinstance}".tmp ]; then
  1729.             if [ -s "${dldrnvmdir}/netdevnameformat" ]; then
  1730.                 read netdevnameformat < ${dldrnvmdir}/netdevnameformat
  1731.                 echo "DriverLoaderNetDevName=\"${netdevnameformat}\"" >> "${dldrcnfdir}/${newinstance}".tmp
  1732.             else
  1733.                 case "${OSDISTNAME}${OSDISTVERS}" in
  1734.                     SuSE9*)
  1735.                     echo "DriverLoaderNetDevName=\"wlan%d\"" >> "${dldrcnfdir}/${newinstance}".tmp
  1736.                     ;;
  1737.                     *)
  1738.                     ;;
  1739.                 esac
  1740.             fi
  1741.  
  1742.             mv "${dldrcnfdir}/${newinstance}".tmp "${dldrcnfdir}/${newinstance}"
  1743.             res=$?
  1744.             if [ ${res} -ne 0 ]; then
  1745.                 rm -f "${dldrcnfdir}/${newinstance}".tmp
  1746.                 exit ${res}
  1747.             fi
  1748.             break
  1749.         fi
  1750.         rm -f "${dldrcnfdir}/${newinstance}".tmp
  1751.     done
  1752. fi
  1753.  
  1754. if ${do_infocfg}; then
  1755.     if ${rereadparms}; then
  1756.         if ! read_parms; then
  1757.             show_finish_info true
  1758.             exit 0
  1759.         fi
  1760.     fi
  1761.     case "${parm_webconf}" in
  1762.     ?*:?*)
  1763.         echo ""
  1764.         echo "Web configurator: listening on ${parm_webconf}"
  1765.         ;;
  1766.     *)
  1767.         echo ""
  1768.         echo "Web configurator: disabled"
  1769.         ;;
  1770.     esac
  1771.     echo ""
  1772.     echo "Current parameters: (\"dldrconfig --info\")"
  1773.     netif=0; while [ ${netif} -lt ${numnetifs} ]; do
  1774.         show_netif_parms
  1775.         netif=`expr ${netif} + 1`
  1776.     done
  1777.     if ${sawinvalidlicenses}; then
  1778.         if ${isfreeversion}; then
  1779.             needfullversion
  1780.         else
  1781.             show_finish_info false
  1782.             echo ""
  1783.             case "${parm_webconf}" in
  1784.             ?*:?*)
  1785.                 echo "To enable the driver, enter your license information via the web configurator at"
  1786.                 show_webconf_url
  1787.                 echo "or with \"dldrconfig --license\"."
  1788.                 ;;
  1789.             *)
  1790.                 echo "To enable the driver, enter your license information with \"dldrconfig --license\"."
  1791.                 ;;
  1792.             esac
  1793.             echo ""
  1794.             echo "License owner and key data must EXACTLY match the information respectively"
  1795.             echo "provided to and by Linuxant. Otherwise, license status will not be \"OK\"!"
  1796.         fi
  1797.     fi
  1798. fi
  1799.  
  1800. if ${do_dumpdiag}; then
  1801.     if [ -n "${setdiagfile}" ]; then
  1802.         dldrdiagfile="${setdiagfile}"
  1803.     fi
  1804.     dump_diagnostics || exit $?
  1805. fi
  1806.  
  1807.